package controllers

import (
	"Blog/syserror"
	"github.com/prometheus/common/log"
)

type ErrorController struct{
	BaseController   //组合预处理的
}

func (e *ErrorController) Error404(){
	e.TplName="error/404.html"
	if e.IsAjax(){   //???
	 e.jsonErr(syserror.Err404{})
	}
}

func (e *ErrorController) Error500(){
	e.TplName="error/500.html"
	err,ok:=e.Data["error"].(error)    //类型断言，判断是否是系统的error错误,不是系统错误就需要自定义
	if !ok{
        err=syserror.New("未知错误",nil)   //因为接口Error接口实现了接口error的Error方法
	}
	serr,ok:=err.(syserror.Error)    //判断是不是自定义错误，不是就返回系统错误
	if !ok{
		serr=syserror.New(err.Error(),nil)
	}
	if serr.Syserr()!=nil{   //返回的系统错误不为空，则直接记录日志
         log.Info(serr.Syserr(),serr.Error())
	}
	//否则为其他错误
	if e.IsAjax() { //如果是ajax请求
         e.jsonErr(serr)
	}else{
         e.Data["content"]=serr.Error()
	}
}
func (e *ErrorController) jsonErr(serr syserror.Error){   //传入接口封装
	e.Ctx.Output.SetStatus(200) //设置状态码为200
	e.Data["json"] = map[string]interface{}{
		"code": serr.Code(),
		"msg":  serr.Error(),   //返回自定义错误
	}
	_ = e.ServeJSON()
}
